<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // catch方法会在promise对象失败的时候执行（调用reject的时候执行）
    // catch也会在前面的链式调用的.then里面出错的时候执行



    // let done = false;
    // const p1 = new Promise((resolve, reject) => {
    //   setTimeout(() => {
    //     if (done) {
    //       resolve() // 如果调用了resolve()，相当于就是将 进行中 的状态变成了 已完成
    //     } else {
    //       reject("失败了") // 如果调用了reject()，相当于就是将 进行中 的状态变成了 已失败
    //     }
    //   }, 3000)
    // })

    // p1.then(() => {
    //   console.log(123);
    // }).catch((str) => {
    //   console.log(456, str);
    // })


    const p1 = new Promise((resolve, reject) => {
      setTimeout(() => {
        // try {
        //   // throw new Error('test');
        //   console.log(a.b);
        // } catch(err) {
        //   reject(err);
        // }
        resolve()
      }, 3000)
    })

    function delay(ms) {
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve()
        }, ms)
      })
    }

    p1.then(() => {
      console.log("第一个then");
      return delay(2000)
    }).then(() => {
      console.log("第二个then");
      return delay(2000)
    }).then(() => {
      throw new Error('test');
      console.log("第三个then");
      return delay(2000)
    }).then(() => {
      console.log("第四个then");
      return delay(2000)
    }).catch((e) => {
      console.log(e.message);
    })
  </script>
</body>
</html>